package com.zxb.web.controller.system;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.zxb.common.core.controller.BaseController;
import com.zxb.common.core.domain.AjaxResult;
import com.zxb.common.core.domain.model.RegisterBody;
import com.zxb.common.utils.StringUtils;
import com.zxb.framework.web.service.SysRegisterService;
import com.zxb.system.service.ISysConfigService;

/**
 * SysRegisterController 是一个 REST 控制器，负责处理用户注册请求。
 * 它为系统中用户注册提供了一个接口。
 *
 * 使用的注解：
 * - @RestController: 标记此类为一个 REST 控制器，可以处理 HTTP 请求并返回 JSON 响应。
 * - @PostMapping: 处理指定 URI 的 HTTP POST 请求。
 *
 * 依赖：
 * - SysRegisterService: 处理用户注册的业务逻辑。
 * - ISysConfigService: 用于访问配置设置，例如检查是否允许注册。
 *
 *
 */
@RestController
public class SysRegisterController extends BaseController
{
    // 使用 @Autowired 注入 SysRegisterService，提供注册服务。
    @Autowired
    private SysRegisterService registerService;

    // 使用 @Autowired 注入 ISysConfigService，用于访问系统配置。
    @Autowired
    private ISysConfigService configService;

    /**
     * 处理新用户的注册。
     *
     * @param user 包含用户注册信息的 RegisterBody 对象。
     * @return AjaxResult JSON 响应，指示成功或失败。
     *
     * 逻辑流程：
     * - 首先，通过查询系统配置检查是否启用了用户注册功能。
     * - 如果注册功能未启用，则返回错误消息。
     * - 如果注册功能已启用，则将注册过程委托给 SysRegisterService。
     * - 如果注册成功，则返回成功响应；否则，返回错误消息。
     */
    @PostMapping("/register")
    public AjaxResult register(@RequestBody RegisterBody user)
    {
        // 检查系统配置中是否启用了注册功能。
        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
        {
            // 如果注册功能被禁用，则返回错误信息。
            return error("当前系统没有开启注册功能！");
        }
        // 注册用户并获取响应消息。
        String msg = registerService.register(user);
        // 如果消息为空，表示注册成功；否则，返回错误消息。
        return StringUtils.isEmpty(msg) ? success() : error(msg);
    }
}